"""
@name : put_tosql
@author : zhangjian
@projectname: tlbb
"""

import config
from config import DBURL
import country
import pandas as pd
import os
from sqlalchemy import create_engine
from sqlalchemy_utils import database_exists,create_database


def topandas(dir_path,year):
    """
    汇总当前目录下的csv文件，返回一个总df
    """
    #检查传入的路径是否存在
    if not dir_check(dir_path):
        return
    if not dir_check(dir_path + '/Afghanistan.csv'):
        return
    totaldf = pd.read_csv(dir_path + '/Afghanistan.csv')
    #依次遍历所有国家的数据，合成一张总表
    for state in country.country[2:]:
        # 保存数据的文件路径
        file_path = dir_path + '/' + state.get('text') + '.csv'
        try:
            df=pd.read_csv(file_path)
        except FileNotFoundError as e:
            print(f'{file_path}这个文件未找到')
        else:
            totaldf=pd.concat([totaldf,df],ignore_index=True)
    # 对总表数据进行去重处理并去除空数据
    totaldf.dropna(subset=['Reporter'], inplace=True)
    #重制索引
    totaldf.reset_index(inplace=True,drop=True)
    #把总表以csv形式存入本地
    totaldf.to_csv(dir_path+'/'+year+'total.csv', index=False)
    return totaldf

def tomysql(totaldf):
    """
    将处理后的数据写入MySQL数据库
    :param totaldf:
    :return:
    """
    # 建立连接，DBURL配置连接数据库的参数
    conn = create_engine(DBURL)
    database_check('sc',conn)
    #写入数据，'union_table'为表名，‘append’表示如果同名表存在就往表里面追加
    totaldf.to_sql("union_table", conn, if_exists="append", index=False)
    print("数据已存入数据库")

def database_check(dbname,conn):
    '''
    检查数据库是否存在，不存在就创建一个
    :param dbname:
    :return:
    '''
    if not database_exists(conn.url):
        create_database(engine.url)
        return  False
    else:
        return True

def dir_check(dir_path):
    '''检查文件路径是否存在'''
    if not os.path.exists(dir_path):
        print(f'{dir_path}这个路径不存在')
        return False
    else:
        return True

if __name__ == '__main__':
    # 需要处理的本地数据
    dir_path = "data/" + config.Products
    if not dir_check(dir_path):
        print(f'找不到这个路径{dir_path}')
    for year in range(int(config.Start_Year), int(config.End_Year) + 1):
        print(f"正在处理本地{year}年的数据。。。")
        year_path = dir_path + "/" + str(year)
        #按年处理数据，每次返回一个总df
        totaldf = topandas(year_path, str(year))
        print(f"正在把{year}年的数据存入数据库中。。。")
        #把数据存入数据库
        tomysql(totaldf)
    print("数据已全部存入数据库")
